package com.zhn;

/**
 * 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性：
 *
 * 每行的元素从左到右升序排列。
 * 每列的元素从上到下升序排列。
 *
 * 输入：matrix = [[1,4,7,11,15],
 *               [2,5,8,12,19]
 *              ,[3,6,9,16,22]
 *              ,[10,13,14,17,24],
 *               [18,21,23,26,30]],
 * target = 5
 * 输出：true
 */

//从右上角向左下方遍历
//如果 matrix[x,y]=target，说明搜索完成；
//如果 matrix[x,y]>target，由于每一列的元素都是升序排列的，那么在当前的搜索矩阵中，
// 所有位于第 y 列的元素都是严格大于 target 的，因此我们可以将它们全部忽略，即将 y 减少 1
//如果 matrix[x,y]<target，由于每一行的元素都是升序排列的，那么在当前的搜索矩阵中，
// 所有位于第 x 行的元素都是严格小于 target 的，因此我们可以将它们全部忽略，即将 x 增加 1。

public class SearchMatrix {
    public static void main(String[] args) {
        int[][] matrix = {
                {1,4,7,11,15},
                {2,5,8,12,19},
                {3,6,9,16,22},
                {10,13,14,17,24},
                {18,21,23,26,30}};
        boolean b = searchMatrix(matrix, 5);
        System.out.println(b);
    }
    public static boolean searchMatrix(int[][] matrix, int target) {
        int m = 0;
        int n = matrix[0].length - 1;
        while(n >= 0 && m < matrix.length){
            if(matrix[m][n] == target){
                return true;
            }else if (matrix[m][n] > target) {
                n--;
            }else {
                m++;
            }
        }
        return false;
    }
}
